
t = db.indexapi;
t.drop();

key = {
    x: 1
};

c = {
    ns: t._fullName,
    key: key,
    name: t._genIndexName(key)
};
assert.eq(c, t._indexSpec({x: 1}), "A");

c.name = "bob";
assert.eq(c, t._indexSpec({x: 1}, "bob"), "B");

c.name = t._genIndexName(key);
assert.eq(c, t._indexSpec({x: 1}), "C");

c.unique = true;
assert.eq(c, t._indexSpec({x: 1}, true), "D");
assert.eq(c, t._indexSpec({x: 1}, [true]), "E");
assert.eq(c, t._indexSpec({x: 1}, {unique: true}), "F");

c.dropDups = true;
assert.eq(c, t._indexSpec({x: 1}, [true, true]), "G");
assert.eq(c, t._indexSpec({x: 1}, {unique: true, dropDups: true}), "F");

t.ensureIndex({x: 1}, {unique: true});
idx = t.getIndexes();
assert.eq(2, idx.length, "M1");
assert.eq(key, idx[1].key, "M2");
assert(idx[1].unique, "M3");

t.drop();
t.ensureIndex({x: 1}, {unique: 1});
idx = t.getIndexes();
assert.eq(2, idx.length, "M1");
assert.eq(key, idx[1].key, "M2");
assert(idx[1].unique, "M3");
// printjson( idx );

// Test that attempting to create index in an invalid namespace fails.
assert.writeError(db.system.indexes.insert({ns: "test", key: {x: 1}, name: "x"}));
